package bch.maven.plugin.guava;

import com.google.common.collect.MinMaxPriorityQueue;
import java.util.Comparator;

/**
 * 演示 Guava MinMaxPriorityQueue 的完整用法
 * 任务按 priority（优先级）排序：值越大优先级越高
 */
public class MinMaxPriorityQueueExample {

    /** 模拟一个任务实体 */
    static class Task {
        private final String name;
        private final int priority;

        public Task(String name, int priority) {
            this.name = name;
            this.priority = priority;
        }

        public int getPriority() {
            return priority;
        }

        @Override
        public String toString() {
            return String.format("%s(priority=%d)", name, priority);
        }
    }

    public static void main(String[] args) {
        // 创建一个双端优先队列，容量最多 5 个任务，按优先级升序排列
        MinMaxPriorityQueue<Task> taskQueue = MinMaxPriorityQueue
                .orderedBy(Comparator.comparingInt(Task::getPriority))
                .maximumSize(5)
                .create();

        // 添加任务
        taskQueue.add(new Task("低优先任务", 1));
        taskQueue.add(new Task("中优先任务", 5));
        taskQueue.add(new Task("高优先任务", 10));
        taskQueue.add(new Task("紧急任务", 20));
        taskQueue.add(new Task("后台任务", 3));
        taskQueue.add(new Task("新任务（超出容量）", 15)); // 将自动丢弃最小优先的任务

        System.out.println("所有任务（升序）：");
        taskQueue.forEach(System.out::println);
        System.out.println("----------------------");

        // 查看最高和最低优先任务
        System.out.println("最高优先任务: " + taskQueue.peekLast());
        System.out.println("最低优先任务: " + taskQueue.peekFirst());
        System.out.println("----------------------");

        // 模拟任务执行：先执行最高优先的任务
        while (!taskQueue.isEmpty()) {
            Task next = taskQueue.pollLast(); // 从最高优先开始执行
            System.out.println("执行任务: " + next);
        }

        System.out.println("所有任务执行完毕。");
    }
}
